//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS GlobalAccelerator service.
///
/// Global Accelerator This is the Global Accelerator API Reference. This guide is for developers who need detailed information about
/// 		    Global Accelerator API actions, data types, and errors. For more information about Global Accelerator features, see the
/// 	    	Global Accelerator Developer Guide. Global Accelerator is a service in which you create accelerators to improve the performance
/// 			of your applications for local and global users. Depending on the type of accelerator you choose, you can
/// 			gain additional benefits.    By using a standard accelerator, you can improve availability of your internet applications
/// 			    that are used by a global audience. With a standard accelerator, Global Accelerator directs traffic to optimal endpoints over the Amazon Web Services
/// 				global network.    For other scenarios, you might choose a custom routing accelerator. With a custom routing accelerator, you
/// 				can use application logic to directly map one or more users to a specific endpoint among many endpoints.    Global Accelerator is a global service that supports endpoints in multiple Amazon Web Services Regions but you must specify the
/// 		    	US West (Oregon) Region to create, update, or otherwise work with accelerators.  That is, for example, specify --region us-west-2
/// 		    	on Amazon Web Services CLI commands.  By default, Global Accelerator provides you with static IP addresses that you associate with your accelerator. The static IP addresses
/// 			are anycast from the Amazon Web Services edge network. For IPv4, Global Accelerator provides two static IPv4 addresses. For dual-stack,
/// 			Global Accelerator provides a total of four addresses: two static IPv4 addresses and two static IPv6 addresses.
/// 			With a standard accelerator for IPv4, instead of using the addresses that Global Accelerator provides, you can configure
/// 			these entry points to be IPv4 addresses from your own IP address ranges that you bring to Global Accelerator (BYOIP).  For a standard accelerator,
/// 	        they distribute incoming application traffic across multiple endpoint resources in multiple Amazon Web Services Regions , which increases
/// 			the availability of your applications. Endpoints for standard accelerators can be Network Load Balancers, Application Load Balancers,
/// 	    	Amazon EC2 instances, or Elastic IP addresses that are located in one Amazon Web Services Region or multiple Amazon Web Services Regions. For custom routing
/// 	        accelerators, you map traffic that arrives to the static IP addresses to specific Amazon EC2 servers in endpoints that
/// 			are virtual private cloud (VPC) subnets.  The static IP addresses remain assigned to your accelerator for as long as it exists, even if you
/// 				disable the accelerator and it no longer accepts or routes traffic. However, when you
/// 					delete an accelerator, you lose the static IP addresses that
/// 				are assigned to it, so you can no longer route traffic by using them. You can use
/// 				IAM policies like tag-based permissions with Global Accelerator to limit the users who have
/// 				permissions to delete an accelerator. For more information, see Tag-based policies.  For standard accelerators, Global Accelerator uses the Amazon Web Services global network to route traffic to the optimal regional endpoint based
/// 			on health, client location, and policies that you configure. The service reacts instantly to
/// 			changes in health or configuration to ensure that internet traffic from clients is always
/// 			directed to healthy endpoints. For more information about understanding and using Global Accelerator, see the
/// 			Global Accelerator Developer Guide.
public struct GlobalAccelerator: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the GlobalAccelerator client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "GlobalAccelerator_V20180706",
            serviceName: "GlobalAccelerator",
            serviceIdentifier: "globalaccelerator",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2018-08-08",
            endpoint: endpoint,
            serviceEndpoints: Self.serviceEndpoints,
            errorType: GlobalAcceleratorErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }


    /// custom endpoints for regions
    static var serviceEndpoints: [String: String] {[
        "fips-us-west-2": "globalaccelerator-fips.us-west-2.amazonaws.com"
    ]}



    // MARK: API Calls

    /// Associate a virtual private cloud (VPC) subnet endpoint with your custom routing accelerator. The listener port range must be large enough to support the number of IP addresses that can be
    /// 		specified in your subnet. The number of ports required is: subnet size times the number
    /// 		of ports per destination EC2 instances. For example, a subnet defined as /24 requires a listener
    /// 		port range of at least 255 ports.  Note: You must have enough remaining listener ports available to
    /// 		map to the subnet ports, or the call will fail with a LimitExceededException. By default, all destinations in a subnet in a custom routing accelerator cannot receive traffic. To enable all
    /// 			destinations to receive traffic, or to specify individual port mappings that can receive
    /// 			traffic, see the
    /// 				AllowCustomRoutingTraffic operation.
    @Sendable
    @inlinable
    public func addCustomRoutingEndpoints(_ input: AddCustomRoutingEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddCustomRoutingEndpointsResponse {
        try await self.client.execute(
            operation: "AddCustomRoutingEndpoints", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associate a virtual private cloud (VPC) subnet endpoint with your custom routing accelerator. The listener port range must be large enough to support the number of IP addresses that can be
    /// 		specified in your subnet. The number of ports required is: subnet size times the number
    /// 		of ports per destination EC2 instances. For example, a subnet defined as /24 requires a listener
    /// 		port range of at least 255 ports.  Note: You must have enough remaining listener ports available to
    /// 		map to the subnet ports, or the call will fail with a LimitExceededException. By default, all destinations in a subnet in a custom routing accelerator cannot receive traffic. To enable all
    /// 			destinations to receive traffic, or to specify individual port mappings that can receive
    /// 			traffic, see the
    /// 				AllowCustomRoutingTraffic operation.
    ///
    /// Parameters:
    ///   - endpointConfigurations: The list of endpoint objects to add to a custom routing accelerator.
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group for the custom routing endpoint.
    ///   - logger: Logger use during operation
    @inlinable
    public func addCustomRoutingEndpoints(
        endpointConfigurations: [CustomRoutingEndpointConfiguration],
        endpointGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddCustomRoutingEndpointsResponse {
        let input = AddCustomRoutingEndpointsRequest(
            endpointConfigurations: endpointConfigurations, 
            endpointGroupArn: endpointGroupArn
        )
        return try await self.addCustomRoutingEndpoints(input, logger: logger)
    }

    /// Add endpoints to an endpoint group. The AddEndpoints API operation is the recommended option for adding endpoints. The
    /// 			alternative options are to add endpoints when you create an endpoint group (with the
    /// 			CreateEndpointGroup API)
    /// 			or when you update an endpoint group (with the
    /// 			UpdateEndpointGroup API).  There are two advantages to using AddEndpoints to add endpoints in Global Accelerator:   It's faster, because Global Accelerator only has to resolve the new endpoints that
    /// 					you're adding, rather than resolving new and existing endpoints.   It's more convenient, because you don't need to specify the current
    /// 					endpoints that are already in the endpoint group, in addition to the new endpoints that
    /// 					you want to add.   For information about endpoint types and requirements for endpoints that you can add
    /// 			to Global Accelerator, see
    /// 				Endpoints for standard accelerators in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func addEndpoints(_ input: AddEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddEndpointsResponse {
        try await self.client.execute(
            operation: "AddEndpoints", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Add endpoints to an endpoint group. The AddEndpoints API operation is the recommended option for adding endpoints. The
    /// 			alternative options are to add endpoints when you create an endpoint group (with the
    /// 			CreateEndpointGroup API)
    /// 			or when you update an endpoint group (with the
    /// 			UpdateEndpointGroup API).  There are two advantages to using AddEndpoints to add endpoints in Global Accelerator:   It's faster, because Global Accelerator only has to resolve the new endpoints that
    /// 					you're adding, rather than resolving new and existing endpoints.   It's more convenient, because you don't need to specify the current
    /// 					endpoints that are already in the endpoint group, in addition to the new endpoints that
    /// 					you want to add.   For information about endpoint types and requirements for endpoints that you can add
    /// 			to Global Accelerator, see
    /// 				Endpoints for standard accelerators in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - endpointConfigurations: The list of endpoint objects.
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group.
    ///   - logger: Logger use during operation
    @inlinable
    public func addEndpoints(
        endpointConfigurations: [EndpointConfiguration],
        endpointGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddEndpointsResponse {
        let input = AddEndpointsRequest(
            endpointConfigurations: endpointConfigurations, 
            endpointGroupArn: endpointGroupArn
        )
        return try await self.addEndpoints(input, logger: logger)
    }

    /// Advertises an IPv4 address range that is provisioned for use with your Amazon Web Services resources
    /// 			through bring your own IP addresses (BYOIP). It can take a few minutes before traffic to
    /// 			the specified addresses starts routing to Amazon Web Services because of propagation delays.  To stop advertising the BYOIP address range, use
    /// 			WithdrawByoipCidr. For more information, see Bring your own
    /// 		    IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func advertiseByoipCidr(_ input: AdvertiseByoipCidrRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AdvertiseByoipCidrResponse {
        try await self.client.execute(
            operation: "AdvertiseByoipCidr", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Advertises an IPv4 address range that is provisioned for use with your Amazon Web Services resources
    /// 			through bring your own IP addresses (BYOIP). It can take a few minutes before traffic to
    /// 			the specified addresses starts routing to Amazon Web Services because of propagation delays.  To stop advertising the BYOIP address range, use
    /// 			WithdrawByoipCidr. For more information, see Bring your own
    /// 		    IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - cidr: The address range, in CIDR notation. This must be the exact range that you provisioned.
    ///   - logger: Logger use during operation
    @inlinable
    public func advertiseByoipCidr(
        cidr: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AdvertiseByoipCidrResponse {
        let input = AdvertiseByoipCidrRequest(
            cidr: cidr
        )
        return try await self.advertiseByoipCidr(input, logger: logger)
    }

    /// Specify the Amazon EC2 instance (destination) IP addresses and ports for a VPC subnet endpoint that can receive traffic
    /// 			for a custom routing accelerator. You can allow traffic to all destinations in the subnet endpoint, or allow traffic to a
    /// 			specified list of destination IP addresses and ports in the subnet. Note that you cannot specify IP addresses or ports
    /// 			outside of the range that you configured for the endpoint group. After you make changes, you can verify that the updates are complete by checking the status of your
    /// 			accelerator: the status changes from IN_PROGRESS to DEPLOYED.
    @Sendable
    @inlinable
    public func allowCustomRoutingTraffic(_ input: AllowCustomRoutingTrafficRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "AllowCustomRoutingTraffic", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Specify the Amazon EC2 instance (destination) IP addresses and ports for a VPC subnet endpoint that can receive traffic
    /// 			for a custom routing accelerator. You can allow traffic to all destinations in the subnet endpoint, or allow traffic to a
    /// 			specified list of destination IP addresses and ports in the subnet. Note that you cannot specify IP addresses or ports
    /// 			outside of the range that you configured for the endpoint group. After you make changes, you can verify that the updates are complete by checking the status of your
    /// 			accelerator: the status changes from IN_PROGRESS to DEPLOYED.
    ///
    /// Parameters:
    ///   - allowAllTrafficToEndpoint: Indicates whether all destination IP addresses and ports for a specified VPC subnet endpoint can receive traffic
    ///   - destinationAddresses: A list of specific Amazon EC2 instance IP addresses (destination addresses) in a subnet that you want to allow to receive
    ///   - destinationPorts: A list of specific Amazon EC2 instance ports (destination ports) that you want to allow to receive traffic.
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group.
    ///   - endpointId: An ID for the endpoint. For custom routing accelerators, this is the virtual private cloud (VPC) subnet ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func allowCustomRoutingTraffic(
        allowAllTrafficToEndpoint: Bool? = nil,
        destinationAddresses: [String]? = nil,
        destinationPorts: [Int]? = nil,
        endpointGroupArn: String,
        endpointId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = AllowCustomRoutingTrafficRequest(
            allowAllTrafficToEndpoint: allowAllTrafficToEndpoint, 
            destinationAddresses: destinationAddresses, 
            destinationPorts: destinationPorts, 
            endpointGroupArn: endpointGroupArn, 
            endpointId: endpointId
        )
        return try await self.allowCustomRoutingTraffic(input, logger: logger)
    }

    /// Create an accelerator. An accelerator includes one or more listeners that process inbound connections and direct traffic
    /// 			to one or more endpoint groups, each of which includes endpoints, such as Network Load Balancers.   Global Accelerator is a global service that supports endpoints in multiple Amazon Web Services Regions but you must specify the
    /// 				US West (Oregon) Region to create, update, or otherwise work with accelerators.  That is, for example, specify --region us-west-2
    /// 				on Amazon Web Services CLI commands.
    @Sendable
    @inlinable
    public func createAccelerator(_ input: CreateAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAcceleratorResponse {
        try await self.client.execute(
            operation: "CreateAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create an accelerator. An accelerator includes one or more listeners that process inbound connections and direct traffic
    /// 			to one or more endpoint groups, each of which includes endpoints, such as Network Load Balancers.   Global Accelerator is a global service that supports endpoints in multiple Amazon Web Services Regions but you must specify the
    /// 				US West (Oregon) Region to create, update, or otherwise work with accelerators.  That is, for example, specify --region us-west-2
    /// 				on Amazon Web Services CLI commands.
    ///
    /// Parameters:
    ///   - enabled: Indicates whether an accelerator is enabled. The value is true or false. The default value is true.  If the value is set to true, an accelerator cannot be deleted. If set to false, the accelerator can be deleted.
    ///   - idempotencyToken: A unique, case-sensitive identifier that you provide to ensure the idempotency—that is, the
    ///   - ipAddresses: Optionally, if you've added your own IP address pool to Global Accelerator (BYOIP), you can choose an IPv4 address
    ///   - ipAddressType: The IP address type that an accelerator supports. For a standard accelerator, the value can be IPV4 or DUAL_STACK.
    ///   - name: The name of the accelerator. The name can have a maximum of 64 characters, must contain only alphanumeric characters,
    ///   - tags: Create tags for an accelerator. For more information, see Tagging
    ///   - logger: Logger use during operation
    @inlinable
    public func createAccelerator(
        enabled: Bool? = nil,
        idempotencyToken: String = CreateAcceleratorRequest.idempotencyToken(),
        ipAddresses: [String]? = nil,
        ipAddressType: IpAddressType? = nil,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAcceleratorResponse {
        let input = CreateAcceleratorRequest(
            enabled: enabled, 
            idempotencyToken: idempotencyToken, 
            ipAddresses: ipAddresses, 
            ipAddressType: ipAddressType, 
            name: name, 
            tags: tags
        )
        return try await self.createAccelerator(input, logger: logger)
    }

    /// Create a cross-account attachment in Global Accelerator. You create a cross-account attachment to
    /// 			specify the principals who have permission to work with resources
    /// 			in accelerators in their own account. You specify, in the same attachment, the resources that are shared. A principal can be an Amazon Web Services account number or the Amazon Resource Name (ARN) for an
    /// 			accelerator. For account numbers that are listed as principals, to work with a resource listed in the attachment,
    /// 			you must sign in to an account specified as a principal. Then, you can work with resources that are listed,
    /// 			with any of your accelerators. If an accelerator ARN is listed in the cross-account attachment as a principal,
    /// 			anyone with permission to make updates to the accelerator can work with resources that are listed in the
    /// 			attachment.  Specify each principal and resource separately. To specify two CIDR address pools, list
    /// 			them individually under Resources, and so on. For a command line operation, for example,
    /// 			you might use a statement like the following:  "Resources": [{"Cidr": "169.254.60.0/24"},{"Cidr": "169.254.59.0/24"}]  For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func createCrossAccountAttachment(_ input: CreateCrossAccountAttachmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCrossAccountAttachmentResponse {
        try await self.client.execute(
            operation: "CreateCrossAccountAttachment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create a cross-account attachment in Global Accelerator. You create a cross-account attachment to
    /// 			specify the principals who have permission to work with resources
    /// 			in accelerators in their own account. You specify, in the same attachment, the resources that are shared. A principal can be an Amazon Web Services account number or the Amazon Resource Name (ARN) for an
    /// 			accelerator. For account numbers that are listed as principals, to work with a resource listed in the attachment,
    /// 			you must sign in to an account specified as a principal. Then, you can work with resources that are listed,
    /// 			with any of your accelerators. If an accelerator ARN is listed in the cross-account attachment as a principal,
    /// 			anyone with permission to make updates to the accelerator can work with resources that are listed in the
    /// 			attachment.  Specify each principal and resource separately. To specify two CIDR address pools, list
    /// 			them individually under Resources, and so on. For a command line operation, for example,
    /// 			you might use a statement like the following:  "Resources": [{"Cidr": "169.254.60.0/24"},{"Cidr": "169.254.59.0/24"}]  For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - idempotencyToken: A unique, case-sensitive identifier that you provide to ensure the idempotency—that is, the
    ///   - name: The name of the cross-account attachment.
    ///   - principals: The principals to include in the cross-account attachment. A principal can be an Amazon Web Services account
    ///   - resources: The Amazon Resource Names (ARNs) for the resources to include in the cross-account attachment. A resource can
    ///   - tags: Add tags for a cross-account attachment. For more information, see Tagging
    ///   - logger: Logger use during operation
    @inlinable
    public func createCrossAccountAttachment(
        idempotencyToken: String = CreateCrossAccountAttachmentRequest.idempotencyToken(),
        name: String,
        principals: [String]? = nil,
        resources: [Resource]? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCrossAccountAttachmentResponse {
        let input = CreateCrossAccountAttachmentRequest(
            idempotencyToken: idempotencyToken, 
            name: name, 
            principals: principals, 
            resources: resources, 
            tags: tags
        )
        return try await self.createCrossAccountAttachment(input, logger: logger)
    }

    /// Create a custom routing accelerator. A custom routing accelerator directs traffic to one of possibly thousands
    /// 	    of Amazon EC2 instance destinations running in a single or multiple virtual private clouds (VPC) subnet endpoints. Be aware that, by default, all destination EC2 instances in a VPC subnet endpoint cannot receive
    /// 			traffic. To enable all destinations to receive traffic, or to specify individual port
    /// 			mappings that can receive traffic, see the
    /// 				AllowCustomRoutingTraffic operation.  Global Accelerator is a global service that supports endpoints in multiple Amazon Web Services Regions but you must specify the
    /// 			US West (Oregon) Region to create, update, or otherwise work with accelerators.  That is, for example, specify --region us-west-2
    /// 			on Amazon Web Services CLI commands.
    @Sendable
    @inlinable
    public func createCustomRoutingAccelerator(_ input: CreateCustomRoutingAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCustomRoutingAcceleratorResponse {
        try await self.client.execute(
            operation: "CreateCustomRoutingAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create a custom routing accelerator. A custom routing accelerator directs traffic to one of possibly thousands
    /// 	    of Amazon EC2 instance destinations running in a single or multiple virtual private clouds (VPC) subnet endpoints. Be aware that, by default, all destination EC2 instances in a VPC subnet endpoint cannot receive
    /// 			traffic. To enable all destinations to receive traffic, or to specify individual port
    /// 			mappings that can receive traffic, see the
    /// 				AllowCustomRoutingTraffic operation.  Global Accelerator is a global service that supports endpoints in multiple Amazon Web Services Regions but you must specify the
    /// 			US West (Oregon) Region to create, update, or otherwise work with accelerators.  That is, for example, specify --region us-west-2
    /// 			on Amazon Web Services CLI commands.
    ///
    /// Parameters:
    ///   - enabled: Indicates whether an accelerator is enabled. The value is true or false. The default value is true.  If the value is set to true, an accelerator cannot be deleted. If set to false, the accelerator can be deleted.
    ///   - idempotencyToken: A unique, case-sensitive identifier that you provide to ensure the idempotency—that
    ///   - ipAddresses: Optionally, if you've added your own IP address pool to Global Accelerator (BYOIP), you can choose an IPv4 address
    ///   - ipAddressType: The IP address type that an accelerator supports. For a custom routing accelerator, the value must be IPV4.
    ///   - name: The name of a custom routing accelerator. The name can have a maximum of 64 characters, must contain
    ///   - tags: Create tags for an accelerator. For more information, see Tagging
    ///   - logger: Logger use during operation
    @inlinable
    public func createCustomRoutingAccelerator(
        enabled: Bool? = nil,
        idempotencyToken: String = CreateCustomRoutingAcceleratorRequest.idempotencyToken(),
        ipAddresses: [String]? = nil,
        ipAddressType: IpAddressType? = nil,
        name: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCustomRoutingAcceleratorResponse {
        let input = CreateCustomRoutingAcceleratorRequest(
            enabled: enabled, 
            idempotencyToken: idempotencyToken, 
            ipAddresses: ipAddresses, 
            ipAddressType: ipAddressType, 
            name: name, 
            tags: tags
        )
        return try await self.createCustomRoutingAccelerator(input, logger: logger)
    }

    /// Create an endpoint group for the specified listener for a custom routing accelerator.
    /// 	    An endpoint group is a collection of endpoints in one Amazon Web Services
    /// 		Region.
    @Sendable
    @inlinable
    public func createCustomRoutingEndpointGroup(_ input: CreateCustomRoutingEndpointGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCustomRoutingEndpointGroupResponse {
        try await self.client.execute(
            operation: "CreateCustomRoutingEndpointGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create an endpoint group for the specified listener for a custom routing accelerator.
    /// 	    An endpoint group is a collection of endpoints in one Amazon Web Services
    /// 		Region.
    ///
    /// Parameters:
    ///   - destinationConfigurations: Sets the port range and protocol for all endpoints (virtual private cloud subnets) in a custom routing endpoint group to accept
    ///   - endpointGroupRegion: The Amazon Web Services Region where the endpoint group is located. A listener can have only one endpoint group in a
    ///   - idempotencyToken: A unique, case-sensitive identifier that you provide to ensure the idempotency—that is, the
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener for a custom routing endpoint.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCustomRoutingEndpointGroup(
        destinationConfigurations: [CustomRoutingDestinationConfiguration],
        endpointGroupRegion: String,
        idempotencyToken: String = CreateCustomRoutingEndpointGroupRequest.idempotencyToken(),
        listenerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCustomRoutingEndpointGroupResponse {
        let input = CreateCustomRoutingEndpointGroupRequest(
            destinationConfigurations: destinationConfigurations, 
            endpointGroupRegion: endpointGroupRegion, 
            idempotencyToken: idempotencyToken, 
            listenerArn: listenerArn
        )
        return try await self.createCustomRoutingEndpointGroup(input, logger: logger)
    }

    /// Create a listener to process inbound connections from clients to a custom routing accelerator.
    /// 			Connections arrive to assigned static IP addresses on the port range that you specify.
    @Sendable
    @inlinable
    public func createCustomRoutingListener(_ input: CreateCustomRoutingListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCustomRoutingListenerResponse {
        try await self.client.execute(
            operation: "CreateCustomRoutingListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create a listener to process inbound connections from clients to a custom routing accelerator.
    /// 			Connections arrive to assigned static IP addresses on the port range that you specify.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator for a custom routing listener.
    ///   - idempotencyToken: A unique, case-sensitive identifier that you provide to ensure the idempotency—that is, the
    ///   - portRanges: The port range to support for connections from clients to your accelerator. Separately, you set port ranges for endpoints. For more information, see About
    ///   - logger: Logger use during operation
    @inlinable
    public func createCustomRoutingListener(
        acceleratorArn: String,
        idempotencyToken: String = CreateCustomRoutingListenerRequest.idempotencyToken(),
        portRanges: [PortRange],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCustomRoutingListenerResponse {
        let input = CreateCustomRoutingListenerRequest(
            acceleratorArn: acceleratorArn, 
            idempotencyToken: idempotencyToken, 
            portRanges: portRanges
        )
        return try await self.createCustomRoutingListener(input, logger: logger)
    }

    /// Create an endpoint group for the specified listener. An endpoint group is a collection of endpoints in one Amazon Web Services
    /// 			Region. A resource must be valid and active when you add it as an endpoint. For more information about endpoint types and requirements for endpoints that you can add
    /// 				to Global Accelerator, see
    /// 					Endpoints for standard accelerators in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func createEndpointGroup(_ input: CreateEndpointGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEndpointGroupResponse {
        try await self.client.execute(
            operation: "CreateEndpointGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create an endpoint group for the specified listener. An endpoint group is a collection of endpoints in one Amazon Web Services
    /// 			Region. A resource must be valid and active when you add it as an endpoint. For more information about endpoint types and requirements for endpoints that you can add
    /// 				to Global Accelerator, see
    /// 					Endpoints for standard accelerators in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - endpointConfigurations: The list of endpoint objects.
    ///   - endpointGroupRegion: The Amazon Web Services Region where the endpoint group is located. A listener can have only one endpoint group in a
    ///   - healthCheckIntervalSeconds: The time—10 seconds or 30 seconds—between each health check for an endpoint. The default value is 30.
    ///   - healthCheckPath: If the protocol is HTTP/S, then this specifies the path that is the destination for health check targets. The
    ///   - healthCheckPort: The port that Global Accelerator uses to check the health of endpoints that are part of this endpoint group. The default port
    ///   - healthCheckProtocol: The protocol that Global Accelerator uses to check the health of endpoints that are part of this endpoint group. The default
    ///   - idempotencyToken: A unique, case-sensitive identifier that you provide to ensure the idempotency—that is, the
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener.
    ///   - portOverrides: Override specific listener ports used to route traffic to endpoints that are part of this endpoint group.
    ///   - thresholdCount: The number of consecutive health checks required to set the state of a healthy endpoint to unhealthy, or to set an
    ///   - trafficDialPercentage: The percentage of traffic to send to an Amazon Web Services Region. Additional traffic is distributed to other endpoint groups for
    ///   - logger: Logger use during operation
    @inlinable
    public func createEndpointGroup(
        endpointConfigurations: [EndpointConfiguration]? = nil,
        endpointGroupRegion: String,
        healthCheckIntervalSeconds: Int? = nil,
        healthCheckPath: String? = nil,
        healthCheckPort: Int? = nil,
        healthCheckProtocol: HealthCheckProtocol? = nil,
        idempotencyToken: String = CreateEndpointGroupRequest.idempotencyToken(),
        listenerArn: String,
        portOverrides: [PortOverride]? = nil,
        thresholdCount: Int? = nil,
        trafficDialPercentage: Float? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEndpointGroupResponse {
        let input = CreateEndpointGroupRequest(
            endpointConfigurations: endpointConfigurations, 
            endpointGroupRegion: endpointGroupRegion, 
            healthCheckIntervalSeconds: healthCheckIntervalSeconds, 
            healthCheckPath: healthCheckPath, 
            healthCheckPort: healthCheckPort, 
            healthCheckProtocol: healthCheckProtocol, 
            idempotencyToken: idempotencyToken, 
            listenerArn: listenerArn, 
            portOverrides: portOverrides, 
            thresholdCount: thresholdCount, 
            trafficDialPercentage: trafficDialPercentage
        )
        return try await self.createEndpointGroup(input, logger: logger)
    }

    /// Create a listener to process inbound connections from clients to an accelerator. Connections arrive to assigned static
    /// 			IP addresses on a port, port range, or list of port ranges that you specify.
    @Sendable
    @inlinable
    public func createListener(_ input: CreateListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateListenerResponse {
        try await self.client.execute(
            operation: "CreateListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create a listener to process inbound connections from clients to an accelerator. Connections arrive to assigned static
    /// 			IP addresses on a port, port range, or list of port ranges that you specify.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of your accelerator.
    ///   - clientAffinity: Client affinity lets you direct all requests from a user to the same endpoint, if you have stateful applications,
    ///   - idempotencyToken: A unique, case-sensitive identifier that you provide to ensure the idempotency—that is, the
    ///   - portRanges: The list of port ranges to support for connections from clients to your accelerator.
    ///   - protocol: The protocol for connections from clients to your accelerator.
    ///   - logger: Logger use during operation
    @inlinable
    public func createListener(
        acceleratorArn: String,
        clientAffinity: ClientAffinity? = nil,
        idempotencyToken: String = CreateListenerRequest.idempotencyToken(),
        portRanges: [PortRange],
        protocol: `Protocol`,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateListenerResponse {
        let input = CreateListenerRequest(
            acceleratorArn: acceleratorArn, 
            clientAffinity: clientAffinity, 
            idempotencyToken: idempotencyToken, 
            portRanges: portRanges, 
            protocol: `protocol`
        )
        return try await self.createListener(input, logger: logger)
    }

    /// Delete an accelerator. Before you can delete an accelerator, you must disable it and remove all dependent resources
    /// 			(listeners and endpoint groups). To disable the accelerator, update the accelerator to set Enabled to false.  When you create an accelerator, by default, Global Accelerator provides you with a set of two static IP addresses.
    /// 	        Alternatively, you can bring your own IP address ranges to Global Accelerator and assign IP addresses from those ranges.
    /// 		 The IP addresses are assigned to your accelerator for as long as it exists, even if you disable the accelerator and
    /// 			it no longer accepts or routes traffic. However, when you delete an accelerator, you lose the
    /// 			static IP addresses that are assigned to the accelerator, so you can no longer route traffic by using them.
    /// 			As a best practice, ensure that you have permissions in place to avoid inadvertently deleting accelerators. You
    /// 			can use IAM policies with Global Accelerator to limit the users who have permissions to delete an accelerator. For more information,
    /// 			see Identity and access management in
    /// 		    the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func deleteAccelerator(_ input: DeleteAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete an accelerator. Before you can delete an accelerator, you must disable it and remove all dependent resources
    /// 			(listeners and endpoint groups). To disable the accelerator, update the accelerator to set Enabled to false.  When you create an accelerator, by default, Global Accelerator provides you with a set of two static IP addresses.
    /// 	        Alternatively, you can bring your own IP address ranges to Global Accelerator and assign IP addresses from those ranges.
    /// 		 The IP addresses are assigned to your accelerator for as long as it exists, even if you disable the accelerator and
    /// 			it no longer accepts or routes traffic. However, when you delete an accelerator, you lose the
    /// 			static IP addresses that are assigned to the accelerator, so you can no longer route traffic by using them.
    /// 			As a best practice, ensure that you have permissions in place to avoid inadvertently deleting accelerators. You
    /// 			can use IAM policies with Global Accelerator to limit the users who have permissions to delete an accelerator. For more information,
    /// 			see Identity and access management in
    /// 		    the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of an accelerator.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAccelerator(
        acceleratorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteAcceleratorRequest(
            acceleratorArn: acceleratorArn
        )
        return try await self.deleteAccelerator(input, logger: logger)
    }

    /// Delete a cross-account attachment. When you delete an attachment, Global Accelerator revokes the permission
    /// 			to use the resources in the attachment from all principals in the list of principals. Global Accelerator
    /// 			revokes the permission for specific resources. For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func deleteCrossAccountAttachment(_ input: DeleteCrossAccountAttachmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteCrossAccountAttachment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a cross-account attachment. When you delete an attachment, Global Accelerator revokes the permission
    /// 			to use the resources in the attachment from all principals in the list of principals. Global Accelerator
    /// 			revokes the permission for specific resources. For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - attachmentArn: The Amazon Resource Name (ARN) for the cross-account attachment to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCrossAccountAttachment(
        attachmentArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteCrossAccountAttachmentRequest(
            attachmentArn: attachmentArn
        )
        return try await self.deleteCrossAccountAttachment(input, logger: logger)
    }

    /// Delete a custom routing accelerator. Before you can delete an accelerator, you must disable it and remove all dependent resources
    /// 		(listeners and endpoint groups). To disable the accelerator, update the accelerator to set Enabled to false.  When you create a custom routing accelerator, by default, Global Accelerator provides you with a set of two static IP addresses.
    /// 	 The IP
    /// 			addresses are assigned to your accelerator for as long as it exists, even if you disable the accelerator and
    /// 			it no longer accepts or routes traffic. However, when you delete an accelerator, you lose the
    /// 			static IP addresses that are assigned to the accelerator, so you can no longer route traffic by using them.
    /// 			As a best practice, ensure that you have permissions in place to avoid inadvertently deleting accelerators. You
    /// 			can use IAM policies with Global Accelerator to limit the users who have permissions to delete an accelerator. For more information,
    /// 			see Identity and access management in
    /// 		    the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func deleteCustomRoutingAccelerator(_ input: DeleteCustomRoutingAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteCustomRoutingAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a custom routing accelerator. Before you can delete an accelerator, you must disable it and remove all dependent resources
    /// 		(listeners and endpoint groups). To disable the accelerator, update the accelerator to set Enabled to false.  When you create a custom routing accelerator, by default, Global Accelerator provides you with a set of two static IP addresses.
    /// 	 The IP
    /// 			addresses are assigned to your accelerator for as long as it exists, even if you disable the accelerator and
    /// 			it no longer accepts or routes traffic. However, when you delete an accelerator, you lose the
    /// 			static IP addresses that are assigned to the accelerator, so you can no longer route traffic by using them.
    /// 			As a best practice, ensure that you have permissions in place to avoid inadvertently deleting accelerators. You
    /// 			can use IAM policies with Global Accelerator to limit the users who have permissions to delete an accelerator. For more information,
    /// 			see Identity and access management in
    /// 		    the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the custom routing accelerator to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCustomRoutingAccelerator(
        acceleratorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteCustomRoutingAcceleratorRequest(
            acceleratorArn: acceleratorArn
        )
        return try await self.deleteCustomRoutingAccelerator(input, logger: logger)
    }

    /// Delete an endpoint group from a listener for a custom routing accelerator.
    @Sendable
    @inlinable
    public func deleteCustomRoutingEndpointGroup(_ input: DeleteCustomRoutingEndpointGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteCustomRoutingEndpointGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete an endpoint group from a listener for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCustomRoutingEndpointGroup(
        endpointGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteCustomRoutingEndpointGroupRequest(
            endpointGroupArn: endpointGroupArn
        )
        return try await self.deleteCustomRoutingEndpointGroup(input, logger: logger)
    }

    /// Delete a listener for a custom routing accelerator.
    @Sendable
    @inlinable
    public func deleteCustomRoutingListener(_ input: DeleteCustomRoutingListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteCustomRoutingListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a listener for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCustomRoutingListener(
        listenerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteCustomRoutingListenerRequest(
            listenerArn: listenerArn
        )
        return try await self.deleteCustomRoutingListener(input, logger: logger)
    }

    /// Delete an endpoint group from a listener.
    @Sendable
    @inlinable
    public func deleteEndpointGroup(_ input: DeleteEndpointGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteEndpointGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete an endpoint group from a listener.
    ///
    /// Parameters:
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEndpointGroup(
        endpointGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteEndpointGroupRequest(
            endpointGroupArn: endpointGroupArn
        )
        return try await self.deleteEndpointGroup(input, logger: logger)
    }

    /// Delete a listener from an accelerator.
    @Sendable
    @inlinable
    public func deleteListener(_ input: DeleteListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a listener from an accelerator.
    ///
    /// Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteListener(
        listenerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteListenerRequest(
            listenerArn: listenerArn
        )
        return try await self.deleteListener(input, logger: logger)
    }

    /// Specify the Amazon EC2 instance (destination) IP addresses and ports for a VPC subnet endpoint that cannot receive traffic
    /// 			for a custom routing accelerator. You can deny traffic to all destinations in the VPC endpoint, or deny traffic to a
    /// 			specified list of destination IP addresses and ports. Note that you cannot specify IP addresses
    /// 			or ports outside of the range that you configured for the endpoint group. After you make changes, you can verify that the updates are complete by checking the status of your
    /// 			accelerator: the status changes from IN_PROGRESS to DEPLOYED.
    @Sendable
    @inlinable
    public func denyCustomRoutingTraffic(_ input: DenyCustomRoutingTrafficRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DenyCustomRoutingTraffic", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Specify the Amazon EC2 instance (destination) IP addresses and ports for a VPC subnet endpoint that cannot receive traffic
    /// 			for a custom routing accelerator. You can deny traffic to all destinations in the VPC endpoint, or deny traffic to a
    /// 			specified list of destination IP addresses and ports. Note that you cannot specify IP addresses
    /// 			or ports outside of the range that you configured for the endpoint group. After you make changes, you can verify that the updates are complete by checking the status of your
    /// 			accelerator: the status changes from IN_PROGRESS to DEPLOYED.
    ///
    /// Parameters:
    ///   - denyAllTrafficToEndpoint: Indicates whether all destination IP addresses and ports for a specified VPC subnet endpoint cannot
    ///   - destinationAddresses: A list of specific Amazon EC2 instance IP addresses (destination addresses) in a subnet that you want to prevent from receiving
    ///   - destinationPorts: A list of specific Amazon EC2 instance ports (destination ports) in a subnet endpoint that you want to prevent from
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group.
    ///   - endpointId: An ID for the endpoint. For custom routing accelerators, this is the virtual private cloud (VPC) subnet ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func denyCustomRoutingTraffic(
        denyAllTrafficToEndpoint: Bool? = nil,
        destinationAddresses: [String]? = nil,
        destinationPorts: [Int]? = nil,
        endpointGroupArn: String,
        endpointId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DenyCustomRoutingTrafficRequest(
            denyAllTrafficToEndpoint: denyAllTrafficToEndpoint, 
            destinationAddresses: destinationAddresses, 
            destinationPorts: destinationPorts, 
            endpointGroupArn: endpointGroupArn, 
            endpointId: endpointId
        )
        return try await self.denyCustomRoutingTraffic(input, logger: logger)
    }

    /// Releases the specified address range that you provisioned to use with your Amazon Web Services resources
    /// 			through bring your own IP addresses (BYOIP) and deletes the corresponding address pool.  Before you can release an address range, you must stop advertising it by using WithdrawByoipCidr and you must not have
    /// 			any accelerators that are using static IP addresses allocated from its address range.
    /// 		 For more information, see Bring
    /// 			your own IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func deprovisionByoipCidr(_ input: DeprovisionByoipCidrRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeprovisionByoipCidrResponse {
        try await self.client.execute(
            operation: "DeprovisionByoipCidr", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Releases the specified address range that you provisioned to use with your Amazon Web Services resources
    /// 			through bring your own IP addresses (BYOIP) and deletes the corresponding address pool.  Before you can release an address range, you must stop advertising it by using WithdrawByoipCidr and you must not have
    /// 			any accelerators that are using static IP addresses allocated from its address range.
    /// 		 For more information, see Bring
    /// 			your own IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - cidr: The address range, in CIDR notation. The prefix must be the same prefix that you specified
    ///   - logger: Logger use during operation
    @inlinable
    public func deprovisionByoipCidr(
        cidr: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeprovisionByoipCidrResponse {
        let input = DeprovisionByoipCidrRequest(
            cidr: cidr
        )
        return try await self.deprovisionByoipCidr(input, logger: logger)
    }

    /// Describe an accelerator.
    @Sendable
    @inlinable
    public func describeAccelerator(_ input: DescribeAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAcceleratorResponse {
        try await self.client.execute(
            operation: "DescribeAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe an accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAccelerator(
        acceleratorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAcceleratorResponse {
        let input = DescribeAcceleratorRequest(
            acceleratorArn: acceleratorArn
        )
        return try await self.describeAccelerator(input, logger: logger)
    }

    /// Describe the attributes of an accelerator.
    ///
    @Sendable
    @inlinable
    public func describeAcceleratorAttributes(_ input: DescribeAcceleratorAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAcceleratorAttributesResponse {
        try await self.client.execute(
            operation: "DescribeAcceleratorAttributes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe the attributes of an accelerator.
    ///
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator with the attributes that you want to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAcceleratorAttributes(
        acceleratorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAcceleratorAttributesResponse {
        let input = DescribeAcceleratorAttributesRequest(
            acceleratorArn: acceleratorArn
        )
        return try await self.describeAcceleratorAttributes(input, logger: logger)
    }

    /// Gets configuration information about a cross-account attachment.
    @Sendable
    @inlinable
    public func describeCrossAccountAttachment(_ input: DescribeCrossAccountAttachmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCrossAccountAttachmentResponse {
        try await self.client.execute(
            operation: "DescribeCrossAccountAttachment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets configuration information about a cross-account attachment.
    ///
    /// Parameters:
    ///   - attachmentArn: The Amazon Resource Name (ARN) for the cross-account attachment to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeCrossAccountAttachment(
        attachmentArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCrossAccountAttachmentResponse {
        let input = DescribeCrossAccountAttachmentRequest(
            attachmentArn: attachmentArn
        )
        return try await self.describeCrossAccountAttachment(input, logger: logger)
    }

    /// Describe a custom routing accelerator.
    @Sendable
    @inlinable
    public func describeCustomRoutingAccelerator(_ input: DescribeCustomRoutingAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCustomRoutingAcceleratorResponse {
        try await self.client.execute(
            operation: "DescribeCustomRoutingAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe a custom routing accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeCustomRoutingAccelerator(
        acceleratorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCustomRoutingAcceleratorResponse {
        let input = DescribeCustomRoutingAcceleratorRequest(
            acceleratorArn: acceleratorArn
        )
        return try await self.describeCustomRoutingAccelerator(input, logger: logger)
    }

    /// Describe the attributes of a custom routing accelerator.
    @Sendable
    @inlinable
    public func describeCustomRoutingAcceleratorAttributes(_ input: DescribeCustomRoutingAcceleratorAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCustomRoutingAcceleratorAttributesResponse {
        try await self.client.execute(
            operation: "DescribeCustomRoutingAcceleratorAttributes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe the attributes of a custom routing accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the custom routing accelerator to describe the attributes for.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeCustomRoutingAcceleratorAttributes(
        acceleratorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCustomRoutingAcceleratorAttributesResponse {
        let input = DescribeCustomRoutingAcceleratorAttributesRequest(
            acceleratorArn: acceleratorArn
        )
        return try await self.describeCustomRoutingAcceleratorAttributes(input, logger: logger)
    }

    /// Describe an endpoint group for a custom routing accelerator.
    @Sendable
    @inlinable
    public func describeCustomRoutingEndpointGroup(_ input: DescribeCustomRoutingEndpointGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCustomRoutingEndpointGroupResponse {
        try await self.client.execute(
            operation: "DescribeCustomRoutingEndpointGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe an endpoint group for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeCustomRoutingEndpointGroup(
        endpointGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCustomRoutingEndpointGroupResponse {
        let input = DescribeCustomRoutingEndpointGroupRequest(
            endpointGroupArn: endpointGroupArn
        )
        return try await self.describeCustomRoutingEndpointGroup(input, logger: logger)
    }

    /// The description of a listener for a custom routing accelerator.
    @Sendable
    @inlinable
    public func describeCustomRoutingListener(_ input: DescribeCustomRoutingListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCustomRoutingListenerResponse {
        try await self.client.execute(
            operation: "DescribeCustomRoutingListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// The description of a listener for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeCustomRoutingListener(
        listenerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCustomRoutingListenerResponse {
        let input = DescribeCustomRoutingListenerRequest(
            listenerArn: listenerArn
        )
        return try await self.describeCustomRoutingListener(input, logger: logger)
    }

    /// Describe an endpoint group.
    @Sendable
    @inlinable
    public func describeEndpointGroup(_ input: DescribeEndpointGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEndpointGroupResponse {
        try await self.client.execute(
            operation: "DescribeEndpointGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe an endpoint group.
    ///
    /// Parameters:
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEndpointGroup(
        endpointGroupArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEndpointGroupResponse {
        let input = DescribeEndpointGroupRequest(
            endpointGroupArn: endpointGroupArn
        )
        return try await self.describeEndpointGroup(input, logger: logger)
    }

    /// Describe a listener.
    @Sendable
    @inlinable
    public func describeListener(_ input: DescribeListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeListenerResponse {
        try await self.client.execute(
            operation: "DescribeListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describe a listener.
    ///
    /// Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeListener(
        listenerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeListenerResponse {
        let input = DescribeListenerRequest(
            listenerArn: listenerArn
        )
        return try await self.describeListener(input, logger: logger)
    }

    /// List the accelerators for an Amazon Web Services account.
    @Sendable
    @inlinable
    public func listAccelerators(_ input: ListAcceleratorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAcceleratorsResponse {
        try await self.client.execute(
            operation: "ListAccelerators", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the accelerators for an Amazon Web Services account.
    ///
    /// Parameters:
    ///   - maxResults: The number of Global Accelerator objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccelerators(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAcceleratorsResponse {
        let input = ListAcceleratorsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAccelerators(input, logger: logger)
    }

    /// Lists the IP address ranges that were specified in calls to ProvisionByoipCidr, including
    /// 			the current state and a history of state changes.
    @Sendable
    @inlinable
    public func listByoipCidrs(_ input: ListByoipCidrsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListByoipCidrsResponse {
        try await self.client.execute(
            operation: "ListByoipCidrs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the IP address ranges that were specified in calls to ProvisionByoipCidr, including
    /// 			the current state and a history of state changes.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return with a single call. To retrieve the remaining results, make
    ///   - nextToken: The token for the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listByoipCidrs(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListByoipCidrsResponse {
        let input = ListByoipCidrsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listByoipCidrs(input, logger: logger)
    }

    /// List the cross-account attachments that have been created in Global Accelerator.
    @Sendable
    @inlinable
    public func listCrossAccountAttachments(_ input: ListCrossAccountAttachmentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCrossAccountAttachmentsResponse {
        try await self.client.execute(
            operation: "ListCrossAccountAttachments", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the cross-account attachments that have been created in Global Accelerator.
    ///
    /// Parameters:
    ///   - maxResults: The number of cross-account attachment objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCrossAccountAttachments(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCrossAccountAttachmentsResponse {
        let input = ListCrossAccountAttachmentsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCrossAccountAttachments(input, logger: logger)
    }

    /// List the accounts that have cross-account resources. For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func listCrossAccountResourceAccounts(_ input: ListCrossAccountResourceAccountsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCrossAccountResourceAccountsResponse {
        try await self.client.execute(
            operation: "ListCrossAccountResourceAccounts", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the accounts that have cross-account resources. For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func listCrossAccountResourceAccounts(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCrossAccountResourceAccountsResponse {
        let input = ListCrossAccountResourceAccountsRequest(
        )
        return try await self.listCrossAccountResourceAccounts(input, logger: logger)
    }

    /// List the cross-account resources available to work with.
    @Sendable
    @inlinable
    public func listCrossAccountResources(_ input: ListCrossAccountResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCrossAccountResourcesResponse {
        try await self.client.execute(
            operation: "ListCrossAccountResources", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the cross-account resources available to work with.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of an accelerator in a cross-account attachment.
    ///   - maxResults: The number of cross-account resource objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - resourceOwnerAwsAccountId: The account ID of a resource owner in a cross-account attachment.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCrossAccountResources(
        acceleratorArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceOwnerAwsAccountId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCrossAccountResourcesResponse {
        let input = ListCrossAccountResourcesRequest(
            acceleratorArn: acceleratorArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceOwnerAwsAccountId: resourceOwnerAwsAccountId
        )
        return try await self.listCrossAccountResources(input, logger: logger)
    }

    /// List the custom routing accelerators for an Amazon Web Services account.
    @Sendable
    @inlinable
    public func listCustomRoutingAccelerators(_ input: ListCustomRoutingAcceleratorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCustomRoutingAcceleratorsResponse {
        try await self.client.execute(
            operation: "ListCustomRoutingAccelerators", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the custom routing accelerators for an Amazon Web Services account.
    ///
    /// Parameters:
    ///   - maxResults: The number of custom routing Global Accelerator objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCustomRoutingAccelerators(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCustomRoutingAcceleratorsResponse {
        let input = ListCustomRoutingAcceleratorsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCustomRoutingAccelerators(input, logger: logger)
    }

    /// List the endpoint groups that are associated with a listener for a custom routing accelerator.
    @Sendable
    @inlinable
    public func listCustomRoutingEndpointGroups(_ input: ListCustomRoutingEndpointGroupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCustomRoutingEndpointGroupsResponse {
        try await self.client.execute(
            operation: "ListCustomRoutingEndpointGroups", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the endpoint groups that are associated with a listener for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener to list endpoint groups for.
    ///   - maxResults: The number of endpoint group objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCustomRoutingEndpointGroups(
        listenerArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCustomRoutingEndpointGroupsResponse {
        let input = ListCustomRoutingEndpointGroupsRequest(
            listenerArn: listenerArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCustomRoutingEndpointGroups(input, logger: logger)
    }

    /// List the listeners for a custom routing accelerator.
    @Sendable
    @inlinable
    public func listCustomRoutingListeners(_ input: ListCustomRoutingListenersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCustomRoutingListenersResponse {
        try await self.client.execute(
            operation: "ListCustomRoutingListeners", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the listeners for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to list listeners for.
    ///   - maxResults: The number of listener objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCustomRoutingListeners(
        acceleratorArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCustomRoutingListenersResponse {
        let input = ListCustomRoutingListenersRequest(
            acceleratorArn: acceleratorArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCustomRoutingListeners(input, logger: logger)
    }

    /// Provides a complete mapping from the public accelerator IP address and port to destination EC2 instance
    /// 		IP addresses and ports in the virtual public cloud (VPC) subnet endpoint for a custom routing accelerator.
    /// 		For each subnet endpoint that you add, Global Accelerator creates a new static port mapping for the accelerator. The port
    /// 	    mappings don't change after Global Accelerator generates them, so you can retrieve and cache the full mapping on your servers.  If you remove a subnet from your accelerator, Global Accelerator removes (reclaims) the port mappings. If you add a subnet to  your accelerator, Global Accelerator creates new port mappings (the existing ones don't change). If you add or remove EC2 instances in your subnet, the port mappings don't change, because the mappings are created when you add the subnet to Global Accelerator. The mappings also include a flag for each destination denoting which destination IP addresses and
    /// 		ports are allowed or denied traffic.
    @Sendable
    @inlinable
    public func listCustomRoutingPortMappings(_ input: ListCustomRoutingPortMappingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCustomRoutingPortMappingsResponse {
        try await self.client.execute(
            operation: "ListCustomRoutingPortMappings", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides a complete mapping from the public accelerator IP address and port to destination EC2 instance
    /// 		IP addresses and ports in the virtual public cloud (VPC) subnet endpoint for a custom routing accelerator.
    /// 		For each subnet endpoint that you add, Global Accelerator creates a new static port mapping for the accelerator. The port
    /// 	    mappings don't change after Global Accelerator generates them, so you can retrieve and cache the full mapping on your servers.  If you remove a subnet from your accelerator, Global Accelerator removes (reclaims) the port mappings. If you add a subnet to  your accelerator, Global Accelerator creates new port mappings (the existing ones don't change). If you add or remove EC2 instances in your subnet, the port mappings don't change, because the mappings are created when you add the subnet to Global Accelerator. The mappings also include a flag for each destination denoting which destination IP addresses and
    /// 		ports are allowed or denied traffic.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to list the custom routing port mappings for.
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group to list the custom routing port mappings for.
    ///   - maxResults: The number of destination port mappings that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCustomRoutingPortMappings(
        acceleratorArn: String,
        endpointGroupArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCustomRoutingPortMappingsResponse {
        let input = ListCustomRoutingPortMappingsRequest(
            acceleratorArn: acceleratorArn, 
            endpointGroupArn: endpointGroupArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCustomRoutingPortMappings(input, logger: logger)
    }

    /// List the port mappings for a specific EC2 instance (destination) in a VPC subnet endpoint. The
    /// 			response is the mappings for one destination IP address. This is useful when your subnet endpoint has mappings that
    /// 			span multiple custom routing accelerators in your account, or for scenarios where you only want to
    /// 			list the port mappings for a specific destination instance.
    @Sendable
    @inlinable
    public func listCustomRoutingPortMappingsByDestination(_ input: ListCustomRoutingPortMappingsByDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCustomRoutingPortMappingsByDestinationResponse {
        try await self.client.execute(
            operation: "ListCustomRoutingPortMappingsByDestination", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the port mappings for a specific EC2 instance (destination) in a VPC subnet endpoint. The
    /// 			response is the mappings for one destination IP address. This is useful when your subnet endpoint has mappings that
    /// 			span multiple custom routing accelerators in your account, or for scenarios where you only want to
    /// 			list the port mappings for a specific destination instance.
    ///
    /// Parameters:
    ///   - destinationAddress: The endpoint IP address in a virtual private cloud (VPC) subnet for which you want to receive back port
    ///   - endpointId: The ID for the virtual private cloud (VPC) subnet.
    ///   - maxResults: The number of destination port mappings that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCustomRoutingPortMappingsByDestination(
        destinationAddress: String,
        endpointId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCustomRoutingPortMappingsByDestinationResponse {
        let input = ListCustomRoutingPortMappingsByDestinationRequest(
            destinationAddress: destinationAddress, 
            endpointId: endpointId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCustomRoutingPortMappingsByDestination(input, logger: logger)
    }

    /// List the endpoint groups that are associated with a listener.
    @Sendable
    @inlinable
    public func listEndpointGroups(_ input: ListEndpointGroupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEndpointGroupsResponse {
        try await self.client.execute(
            operation: "ListEndpointGroups", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the endpoint groups that are associated with a listener.
    ///
    /// Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener.
    ///   - maxResults: The number of endpoint group objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEndpointGroups(
        listenerArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEndpointGroupsResponse {
        let input = ListEndpointGroupsRequest(
            listenerArn: listenerArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEndpointGroups(input, logger: logger)
    }

    /// List the listeners for an accelerator.
    @Sendable
    @inlinable
    public func listListeners(_ input: ListListenersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListListenersResponse {
        try await self.client.execute(
            operation: "ListListeners", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the listeners for an accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator for which you want to list listener objects.
    ///   - maxResults: The number of listener objects that you want to return with this call. The default value is 10.
    ///   - nextToken: The token for the next set of results. You receive this token from a previous call.
    ///   - logger: Logger use during operation
    @inlinable
    public func listListeners(
        acceleratorArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListListenersResponse {
        let input = ListListenersRequest(
            acceleratorArn: acceleratorArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listListeners(input, logger: logger)
    }

    /// List all tags for an accelerator.  For more information, see Tagging
    /// 		    in Global Accelerator in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List all tags for an accelerator.  For more information, see Tagging
    /// 		    in Global Accelerator in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the accelerator to list tags for. An ARN uniquely identifies an accelerator.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Provisions an IP address range to use with your Amazon Web Services resources through bring your own IP
    /// 			addresses (BYOIP) and creates a corresponding address pool. After the address range is provisioned,
    /// 			it is ready to be advertised using
    /// 			AdvertiseByoipCidr. For more information, see Bring your own
    /// 			IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func provisionByoipCidr(_ input: ProvisionByoipCidrRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ProvisionByoipCidrResponse {
        try await self.client.execute(
            operation: "ProvisionByoipCidr", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provisions an IP address range to use with your Amazon Web Services resources through bring your own IP
    /// 			addresses (BYOIP) and creates a corresponding address pool. After the address range is provisioned,
    /// 			it is ready to be advertised using
    /// 			AdvertiseByoipCidr. For more information, see Bring your own
    /// 			IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - cidr: The public IPv4 address range, in CIDR notation. The most specific IP prefix that you can
    ///   - cidrAuthorizationContext: A signed document that proves that you are authorized to bring the specified IP address range to
    ///   - logger: Logger use during operation
    @inlinable
    public func provisionByoipCidr(
        cidr: String,
        cidrAuthorizationContext: CidrAuthorizationContext,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ProvisionByoipCidrResponse {
        let input = ProvisionByoipCidrRequest(
            cidr: cidr, 
            cidrAuthorizationContext: cidrAuthorizationContext
        )
        return try await self.provisionByoipCidr(input, logger: logger)
    }

    /// Remove endpoints from a custom routing accelerator.
    @Sendable
    @inlinable
    public func removeCustomRoutingEndpoints(_ input: RemoveCustomRoutingEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RemoveCustomRoutingEndpoints", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Remove endpoints from a custom routing accelerator.
    ///
    /// Parameters:
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group to remove endpoints from.
    ///   - endpointIds: The IDs for the endpoints. For custom routing accelerators, endpoint IDs are the virtual private cloud (VPC)
    ///   - logger: Logger use during operation
    @inlinable
    public func removeCustomRoutingEndpoints(
        endpointGroupArn: String,
        endpointIds: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RemoveCustomRoutingEndpointsRequest(
            endpointGroupArn: endpointGroupArn, 
            endpointIds: endpointIds
        )
        return try await self.removeCustomRoutingEndpoints(input, logger: logger)
    }

    /// Remove endpoints from an endpoint group.  The RemoveEndpoints API operation is the recommended option for removing endpoints. The alternative is to remove
    /// 			endpoints by updating an endpoint group by using the
    /// 			UpdateEndpointGroup
    /// 			API operation. There are two advantages to using AddEndpoints to remove endpoints instead:   It's more convenient, because you only need to specify the endpoints that you want to remove. With the
    /// 				UpdateEndpointGroup API operation, you must specify all of the endpoints in the
    /// 				endpoint group except the ones that you want to remove from the group.   It's faster, because Global Accelerator doesn't need to resolve any endpoints. With the
    /// 				UpdateEndpointGroup API operation, Global Accelerator must resolve all of the endpoints that
    /// 				remain in the group.
    @Sendable
    @inlinable
    public func removeEndpoints(_ input: RemoveEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RemoveEndpoints", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Remove endpoints from an endpoint group.  The RemoveEndpoints API operation is the recommended option for removing endpoints. The alternative is to remove
    /// 			endpoints by updating an endpoint group by using the
    /// 			UpdateEndpointGroup
    /// 			API operation. There are two advantages to using AddEndpoints to remove endpoints instead:   It's more convenient, because you only need to specify the endpoints that you want to remove. With the
    /// 				UpdateEndpointGroup API operation, you must specify all of the endpoints in the
    /// 				endpoint group except the ones that you want to remove from the group.   It's faster, because Global Accelerator doesn't need to resolve any endpoints. With the
    /// 				UpdateEndpointGroup API operation, Global Accelerator must resolve all of the endpoints that
    /// 				remain in the group.
    ///
    /// Parameters:
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group.
    ///   - endpointIdentifiers: The identifiers of the endpoints that you want to remove.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeEndpoints(
        endpointGroupArn: String,
        endpointIdentifiers: [EndpointIdentifier],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RemoveEndpointsRequest(
            endpointGroupArn: endpointGroupArn, 
            endpointIdentifiers: endpointIdentifiers
        )
        return try await self.removeEndpoints(input, logger: logger)
    }

    /// Add tags to an accelerator resource.  For more information, see Tagging
    /// 		    in Global Accelerator in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Add tags to an accelerator resource.  For more information, see Tagging
    /// 		    in Global Accelerator in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the Global Accelerator resource to add tags to. An ARN uniquely identifies a resource.
    ///   - tags: The tags to add to a resource. A tag consists of a key and a value that you define.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Remove tags from a Global Accelerator resource. When you specify a tag key, the action removes both that key and its associated value.
    /// 			The operation succeeds even if you attempt to remove tags from an accelerator that was already removed. For more information, see Tagging
    /// 		    in Global Accelerator in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Remove tags from a Global Accelerator resource. When you specify a tag key, the action removes both that key and its associated value.
    /// 			The operation succeeds even if you attempt to remove tags from an accelerator that was already removed. For more information, see Tagging
    /// 		    in Global Accelerator in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the Global Accelerator resource to remove tags from. An ARN uniquely identifies a resource.
    ///   - tagKeys: The tag key pairs that you want to remove from the specified resources.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Update an accelerator to make changes, such as the following:    Change the name of the accelerator.   Disable the accelerator so that it no longer accepts or routes traffic, or so that you can delete it.   Enable the accelerator, if it is disabled.   Change the IP address type to dual-stack if it is IPv4, or change the IP address type to IPv4 if it's dual-stack.   Be aware that static IP addresses remain assigned to your accelerator for as long as it exists, even if you disable the accelerator and it no
    /// 			longer accepts or routes traffic. However, when you delete the accelerator, you lose the static IP addresses that are assigned to it, so you
    /// 			can no longer route traffic by using them.  Global Accelerator is a global service that supports endpoints in multiple Amazon Web Services Regions but you must specify the
    /// 				US West (Oregon) Region to create, update, or otherwise work with accelerators.  That is, for example, specify --region us-west-2
    /// 				on Amazon Web Services CLI commands.
    @Sendable
    @inlinable
    public func updateAccelerator(_ input: UpdateAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAcceleratorResponse {
        try await self.client.execute(
            operation: "UpdateAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update an accelerator to make changes, such as the following:    Change the name of the accelerator.   Disable the accelerator so that it no longer accepts or routes traffic, or so that you can delete it.   Enable the accelerator, if it is disabled.   Change the IP address type to dual-stack if it is IPv4, or change the IP address type to IPv4 if it's dual-stack.   Be aware that static IP addresses remain assigned to your accelerator for as long as it exists, even if you disable the accelerator and it no
    /// 			longer accepts or routes traffic. However, when you delete the accelerator, you lose the static IP addresses that are assigned to it, so you
    /// 			can no longer route traffic by using them.  Global Accelerator is a global service that supports endpoints in multiple Amazon Web Services Regions but you must specify the
    /// 				US West (Oregon) Region to create, update, or otherwise work with accelerators.  That is, for example, specify --region us-west-2
    /// 				on Amazon Web Services CLI commands.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to update.
    ///   - enabled: Indicates whether an accelerator is enabled. The value is true or false. The default value is true.  If the value is set to true, the accelerator cannot be deleted. If set to false, the accelerator can be deleted.
    ///   - ipAddresses: The IP addresses for an accelerator.
    ///   - ipAddressType: The IP address type that an accelerator supports. For a standard accelerator, the value can be IPV4 or DUAL_STACK.
    ///   - name: The name of the accelerator. The name can have a maximum of 64 characters, must contain only alphanumeric characters,
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAccelerator(
        acceleratorArn: String,
        enabled: Bool? = nil,
        ipAddresses: [String]? = nil,
        ipAddressType: IpAddressType? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAcceleratorResponse {
        let input = UpdateAcceleratorRequest(
            acceleratorArn: acceleratorArn, 
            enabled: enabled, 
            ipAddresses: ipAddresses, 
            ipAddressType: ipAddressType, 
            name: name
        )
        return try await self.updateAccelerator(input, logger: logger)
    }

    /// Update the attributes for an accelerator.
    @Sendable
    @inlinable
    public func updateAcceleratorAttributes(_ input: UpdateAcceleratorAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAcceleratorAttributesResponse {
        try await self.client.execute(
            operation: "UpdateAcceleratorAttributes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update the attributes for an accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator that you want to update.
    ///   - flowLogsEnabled: Update whether flow logs are enabled. The default value is false. If the value is true,
    ///   - flowLogsS3Bucket: The name of the Amazon S3 bucket for the flow logs. Attribute is required if FlowLogsEnabled is
    ///   - flowLogsS3Prefix: Update the prefix for the location in the Amazon S3 bucket for the flow logs. Attribute is required if
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAcceleratorAttributes(
        acceleratorArn: String,
        flowLogsEnabled: Bool? = nil,
        flowLogsS3Bucket: String? = nil,
        flowLogsS3Prefix: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAcceleratorAttributesResponse {
        let input = UpdateAcceleratorAttributesRequest(
            acceleratorArn: acceleratorArn, 
            flowLogsEnabled: flowLogsEnabled, 
            flowLogsS3Bucket: flowLogsS3Bucket, 
            flowLogsS3Prefix: flowLogsS3Prefix
        )
        return try await self.updateAcceleratorAttributes(input, logger: logger)
    }

    /// Update a cross-account attachment to add or remove principals or resources. When you update
    /// 			an attachment to remove a principal (account ID or accelerator) or a resource, Global Accelerator
    /// 			revokes the permission for specific resources.  For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func updateCrossAccountAttachment(_ input: UpdateCrossAccountAttachmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateCrossAccountAttachmentResponse {
        try await self.client.execute(
            operation: "UpdateCrossAccountAttachment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update a cross-account attachment to add or remove principals or resources. When you update
    /// 			an attachment to remove a principal (account ID or accelerator) or a resource, Global Accelerator
    /// 			revokes the permission for specific resources.  For more information, see
    /// 			Working with cross-account attachments and resources in Global Accelerator in the
    /// 				Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - addPrincipals: The principals to add to the cross-account attachment. A principal is an account or the Amazon Resource Name (ARN)
    ///   - addResources: The resources to add to the cross-account attachment. A resource listed in a cross-account attachment can be used
    ///   - attachmentArn: The Amazon Resource Name (ARN) of the cross-account attachment to update.
    ///   - name: The name of the cross-account attachment.
    ///   - removePrincipals: The principals to remove from the cross-account attachment. A principal is an account or the Amazon Resource Name (ARN)
    ///   - removeResources: The resources to remove from the cross-account attachment. A resource listed in a cross-account attachment can be used
    ///   - logger: Logger use during operation
    @inlinable
    public func updateCrossAccountAttachment(
        addPrincipals: [String]? = nil,
        addResources: [Resource]? = nil,
        attachmentArn: String,
        name: String? = nil,
        removePrincipals: [String]? = nil,
        removeResources: [Resource]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateCrossAccountAttachmentResponse {
        let input = UpdateCrossAccountAttachmentRequest(
            addPrincipals: addPrincipals, 
            addResources: addResources, 
            attachmentArn: attachmentArn, 
            name: name, 
            removePrincipals: removePrincipals, 
            removeResources: removeResources
        )
        return try await self.updateCrossAccountAttachment(input, logger: logger)
    }

    /// Update a custom routing accelerator.
    @Sendable
    @inlinable
    public func updateCustomRoutingAccelerator(_ input: UpdateCustomRoutingAcceleratorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateCustomRoutingAcceleratorResponse {
        try await self.client.execute(
            operation: "UpdateCustomRoutingAccelerator", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update a custom routing accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to update.
    ///   - enabled: Indicates whether an accelerator is enabled. The value is true or false. The default value is true.  If the value is set to true, the accelerator cannot be deleted. If set to false, the accelerator can be deleted.
    ///   - ipAddresses: The IP addresses for an accelerator.
    ///   - ipAddressType: The IP address type that an accelerator supports. For a custom routing accelerator, the value must be IPV4.
    ///   - name: The name of the accelerator. The name can have a maximum of 64 characters, must contain only alphanumeric characters,
    ///   - logger: Logger use during operation
    @inlinable
    public func updateCustomRoutingAccelerator(
        acceleratorArn: String,
        enabled: Bool? = nil,
        ipAddresses: [String]? = nil,
        ipAddressType: IpAddressType? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateCustomRoutingAcceleratorResponse {
        let input = UpdateCustomRoutingAcceleratorRequest(
            acceleratorArn: acceleratorArn, 
            enabled: enabled, 
            ipAddresses: ipAddresses, 
            ipAddressType: ipAddressType, 
            name: name
        )
        return try await self.updateCustomRoutingAccelerator(input, logger: logger)
    }

    /// Update the attributes for a custom routing accelerator.
    @Sendable
    @inlinable
    public func updateCustomRoutingAcceleratorAttributes(_ input: UpdateCustomRoutingAcceleratorAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateCustomRoutingAcceleratorAttributesResponse {
        try await self.client.execute(
            operation: "UpdateCustomRoutingAcceleratorAttributes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update the attributes for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the custom routing accelerator to update attributes for.
    ///   - flowLogsEnabled: Update whether flow logs are enabled. The default value is false. If the value is true,
    ///   - flowLogsS3Bucket: The name of the Amazon S3 bucket for the flow logs. Attribute is required if FlowLogsEnabled is
    ///   - flowLogsS3Prefix: Update the prefix for the location in the Amazon S3 bucket for the flow logs. Attribute is required if
    ///   - logger: Logger use during operation
    @inlinable
    public func updateCustomRoutingAcceleratorAttributes(
        acceleratorArn: String,
        flowLogsEnabled: Bool? = nil,
        flowLogsS3Bucket: String? = nil,
        flowLogsS3Prefix: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateCustomRoutingAcceleratorAttributesResponse {
        let input = UpdateCustomRoutingAcceleratorAttributesRequest(
            acceleratorArn: acceleratorArn, 
            flowLogsEnabled: flowLogsEnabled, 
            flowLogsS3Bucket: flowLogsS3Bucket, 
            flowLogsS3Prefix: flowLogsS3Prefix
        )
        return try await self.updateCustomRoutingAcceleratorAttributes(input, logger: logger)
    }

    /// Update a listener for a custom routing accelerator.
    @Sendable
    @inlinable
    public func updateCustomRoutingListener(_ input: UpdateCustomRoutingListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateCustomRoutingListenerResponse {
        try await self.client.execute(
            operation: "UpdateCustomRoutingListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update a listener for a custom routing accelerator.
    ///
    /// Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener to update.
    ///   - portRanges: The updated port range to support for connections from clients to your accelerator. If you remove ports that are
    ///   - logger: Logger use during operation
    @inlinable
    public func updateCustomRoutingListener(
        listenerArn: String,
        portRanges: [PortRange],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateCustomRoutingListenerResponse {
        let input = UpdateCustomRoutingListenerRequest(
            listenerArn: listenerArn, 
            portRanges: portRanges
        )
        return try await self.updateCustomRoutingListener(input, logger: logger)
    }

    /// Update an endpoint group. A resource must be valid and active when you add it as an endpoint.
    @Sendable
    @inlinable
    public func updateEndpointGroup(_ input: UpdateEndpointGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateEndpointGroupResponse {
        try await self.client.execute(
            operation: "UpdateEndpointGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update an endpoint group. A resource must be valid and active when you add it as an endpoint.
    ///
    /// Parameters:
    ///   - endpointConfigurations: The list of endpoint objects. A resource must be valid and active when you add it as an endpoint.
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group.
    ///   - healthCheckIntervalSeconds: The time—10 seconds or 30 seconds—between each health check for an endpoint. The default value is 30.
    ///   - healthCheckPath: If the protocol is HTTP/S, then this specifies the path that is the destination for health check targets. The
    ///   - healthCheckPort: The port that Global Accelerator uses to check the health of endpoints that are part of this endpoint group. The default port
    ///   - healthCheckProtocol: The protocol that Global Accelerator uses to check the health of endpoints that are part of this endpoint group. The default
    ///   - portOverrides: Override specific listener ports used to route traffic to endpoints that are part of this endpoint group.
    ///   - thresholdCount: The number of consecutive health checks required to set the state of a healthy endpoint to unhealthy, or to set an
    ///   - trafficDialPercentage: The percentage of traffic to send to an Amazon Web Services Region. Additional traffic is distributed to other endpoint groups for
    ///   - logger: Logger use during operation
    @inlinable
    public func updateEndpointGroup(
        endpointConfigurations: [EndpointConfiguration]? = nil,
        endpointGroupArn: String,
        healthCheckIntervalSeconds: Int? = nil,
        healthCheckPath: String? = nil,
        healthCheckPort: Int? = nil,
        healthCheckProtocol: HealthCheckProtocol? = nil,
        portOverrides: [PortOverride]? = nil,
        thresholdCount: Int? = nil,
        trafficDialPercentage: Float? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateEndpointGroupResponse {
        let input = UpdateEndpointGroupRequest(
            endpointConfigurations: endpointConfigurations, 
            endpointGroupArn: endpointGroupArn, 
            healthCheckIntervalSeconds: healthCheckIntervalSeconds, 
            healthCheckPath: healthCheckPath, 
            healthCheckPort: healthCheckPort, 
            healthCheckProtocol: healthCheckProtocol, 
            portOverrides: portOverrides, 
            thresholdCount: thresholdCount, 
            trafficDialPercentage: trafficDialPercentage
        )
        return try await self.updateEndpointGroup(input, logger: logger)
    }

    /// Update a listener.
    @Sendable
    @inlinable
    public func updateListener(_ input: UpdateListenerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateListenerResponse {
        try await self.client.execute(
            operation: "UpdateListener", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update a listener.
    ///
    /// Parameters:
    ///   - clientAffinity: Client affinity lets you direct all requests from a user to the same endpoint, if you have stateful applications,
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener to update.
    ///   - portRanges: The updated list of port ranges for the connections from clients to the accelerator.
    ///   - protocol: The updated protocol for the connections from clients to the accelerator.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateListener(
        clientAffinity: ClientAffinity? = nil,
        listenerArn: String,
        portRanges: [PortRange]? = nil,
        protocol: `Protocol`? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateListenerResponse {
        let input = UpdateListenerRequest(
            clientAffinity: clientAffinity, 
            listenerArn: listenerArn, 
            portRanges: portRanges, 
            protocol: `protocol`
        )
        return try await self.updateListener(input, logger: logger)
    }

    /// Stops advertising an address range that is provisioned as an address pool.
    /// 			You can perform this operation at most once every 10 seconds, even if you specify different address
    /// 			ranges each time. It can take a few minutes before traffic to the specified addresses stops routing to Amazon Web Services because of
    /// 			propagation delays. For more information, see Bring your own
    /// 			IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    @Sendable
    @inlinable
    public func withdrawByoipCidr(_ input: WithdrawByoipCidrRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> WithdrawByoipCidrResponse {
        try await self.client.execute(
            operation: "WithdrawByoipCidr", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops advertising an address range that is provisioned as an address pool.
    /// 			You can perform this operation at most once every 10 seconds, even if you specify different address
    /// 			ranges each time. It can take a few minutes before traffic to the specified addresses stops routing to Amazon Web Services because of
    /// 			propagation delays. For more information, see Bring your own
    /// 			IP addresses (BYOIP) in the Global Accelerator Developer Guide.
    ///
    /// Parameters:
    ///   - cidr: The address range, in CIDR notation. For more information, see
    ///   - logger: Logger use during operation
    @inlinable
    public func withdrawByoipCidr(
        cidr: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> WithdrawByoipCidrResponse {
        let input = WithdrawByoipCidrRequest(
            cidr: cidr
        )
        return try await self.withdrawByoipCidr(input, logger: logger)
    }
}

extension GlobalAccelerator {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: GlobalAccelerator, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension GlobalAccelerator {
    /// Return PaginatorSequence for operation ``listAccelerators(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAcceleratorsPaginator(
        _ input: ListAcceleratorsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAcceleratorsRequest, ListAcceleratorsResponse> {
        return .init(
            input: input,
            command: self.listAccelerators,
            inputKey: \ListAcceleratorsRequest.nextToken,
            outputKey: \ListAcceleratorsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccelerators(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The number of Global Accelerator objects that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAcceleratorsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAcceleratorsRequest, ListAcceleratorsResponse> {
        let input = ListAcceleratorsRequest(
            maxResults: maxResults
        )
        return self.listAcceleratorsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listByoipCidrs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listByoipCidrsPaginator(
        _ input: ListByoipCidrsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListByoipCidrsRequest, ListByoipCidrsResponse> {
        return .init(
            input: input,
            command: self.listByoipCidrs,
            inputKey: \ListByoipCidrsRequest.nextToken,
            outputKey: \ListByoipCidrsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listByoipCidrs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return with a single call. To retrieve the remaining results, make
    ///   - logger: Logger used for logging
    @inlinable
    public func listByoipCidrsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListByoipCidrsRequest, ListByoipCidrsResponse> {
        let input = ListByoipCidrsRequest(
            maxResults: maxResults
        )
        return self.listByoipCidrsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCrossAccountAttachments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCrossAccountAttachmentsPaginator(
        _ input: ListCrossAccountAttachmentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCrossAccountAttachmentsRequest, ListCrossAccountAttachmentsResponse> {
        return .init(
            input: input,
            command: self.listCrossAccountAttachments,
            inputKey: \ListCrossAccountAttachmentsRequest.nextToken,
            outputKey: \ListCrossAccountAttachmentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCrossAccountAttachments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The number of cross-account attachment objects that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCrossAccountAttachmentsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCrossAccountAttachmentsRequest, ListCrossAccountAttachmentsResponse> {
        let input = ListCrossAccountAttachmentsRequest(
            maxResults: maxResults
        )
        return self.listCrossAccountAttachmentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCrossAccountResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCrossAccountResourcesPaginator(
        _ input: ListCrossAccountResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCrossAccountResourcesRequest, ListCrossAccountResourcesResponse> {
        return .init(
            input: input,
            command: self.listCrossAccountResources,
            inputKey: \ListCrossAccountResourcesRequest.nextToken,
            outputKey: \ListCrossAccountResourcesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCrossAccountResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of an accelerator in a cross-account attachment.
    ///   - maxResults: The number of cross-account resource objects that you want to return with this call. The default value is 10.
    ///   - resourceOwnerAwsAccountId: The account ID of a resource owner in a cross-account attachment.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCrossAccountResourcesPaginator(
        acceleratorArn: String? = nil,
        maxResults: Int? = nil,
        resourceOwnerAwsAccountId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCrossAccountResourcesRequest, ListCrossAccountResourcesResponse> {
        let input = ListCrossAccountResourcesRequest(
            acceleratorArn: acceleratorArn, 
            maxResults: maxResults, 
            resourceOwnerAwsAccountId: resourceOwnerAwsAccountId
        )
        return self.listCrossAccountResourcesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCustomRoutingAccelerators(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingAcceleratorsPaginator(
        _ input: ListCustomRoutingAcceleratorsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingAcceleratorsRequest, ListCustomRoutingAcceleratorsResponse> {
        return .init(
            input: input,
            command: self.listCustomRoutingAccelerators,
            inputKey: \ListCustomRoutingAcceleratorsRequest.nextToken,
            outputKey: \ListCustomRoutingAcceleratorsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCustomRoutingAccelerators(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The number of custom routing Global Accelerator objects that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingAcceleratorsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingAcceleratorsRequest, ListCustomRoutingAcceleratorsResponse> {
        let input = ListCustomRoutingAcceleratorsRequest(
            maxResults: maxResults
        )
        return self.listCustomRoutingAcceleratorsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCustomRoutingEndpointGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingEndpointGroupsPaginator(
        _ input: ListCustomRoutingEndpointGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingEndpointGroupsRequest, ListCustomRoutingEndpointGroupsResponse> {
        return .init(
            input: input,
            command: self.listCustomRoutingEndpointGroups,
            inputKey: \ListCustomRoutingEndpointGroupsRequest.nextToken,
            outputKey: \ListCustomRoutingEndpointGroupsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCustomRoutingEndpointGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener to list endpoint groups for.
    ///   - maxResults: The number of endpoint group objects that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingEndpointGroupsPaginator(
        listenerArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingEndpointGroupsRequest, ListCustomRoutingEndpointGroupsResponse> {
        let input = ListCustomRoutingEndpointGroupsRequest(
            listenerArn: listenerArn, 
            maxResults: maxResults
        )
        return self.listCustomRoutingEndpointGroupsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCustomRoutingListeners(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingListenersPaginator(
        _ input: ListCustomRoutingListenersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingListenersRequest, ListCustomRoutingListenersResponse> {
        return .init(
            input: input,
            command: self.listCustomRoutingListeners,
            inputKey: \ListCustomRoutingListenersRequest.nextToken,
            outputKey: \ListCustomRoutingListenersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCustomRoutingListeners(_:logger:)``.
    ///
    /// - Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to list listeners for.
    ///   - maxResults: The number of listener objects that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingListenersPaginator(
        acceleratorArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingListenersRequest, ListCustomRoutingListenersResponse> {
        let input = ListCustomRoutingListenersRequest(
            acceleratorArn: acceleratorArn, 
            maxResults: maxResults
        )
        return self.listCustomRoutingListenersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCustomRoutingPortMappings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingPortMappingsPaginator(
        _ input: ListCustomRoutingPortMappingsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingPortMappingsRequest, ListCustomRoutingPortMappingsResponse> {
        return .init(
            input: input,
            command: self.listCustomRoutingPortMappings,
            inputKey: \ListCustomRoutingPortMappingsRequest.nextToken,
            outputKey: \ListCustomRoutingPortMappingsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCustomRoutingPortMappings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator to list the custom routing port mappings for.
    ///   - endpointGroupArn: The Amazon Resource Name (ARN) of the endpoint group to list the custom routing port mappings for.
    ///   - maxResults: The number of destination port mappings that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingPortMappingsPaginator(
        acceleratorArn: String,
        endpointGroupArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingPortMappingsRequest, ListCustomRoutingPortMappingsResponse> {
        let input = ListCustomRoutingPortMappingsRequest(
            acceleratorArn: acceleratorArn, 
            endpointGroupArn: endpointGroupArn, 
            maxResults: maxResults
        )
        return self.listCustomRoutingPortMappingsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCustomRoutingPortMappingsByDestination(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingPortMappingsByDestinationPaginator(
        _ input: ListCustomRoutingPortMappingsByDestinationRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingPortMappingsByDestinationRequest, ListCustomRoutingPortMappingsByDestinationResponse> {
        return .init(
            input: input,
            command: self.listCustomRoutingPortMappingsByDestination,
            inputKey: \ListCustomRoutingPortMappingsByDestinationRequest.nextToken,
            outputKey: \ListCustomRoutingPortMappingsByDestinationResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCustomRoutingPortMappingsByDestination(_:logger:)``.
    ///
    /// - Parameters:
    ///   - destinationAddress: The endpoint IP address in a virtual private cloud (VPC) subnet for which you want to receive back port
    ///   - endpointId: The ID for the virtual private cloud (VPC) subnet.
    ///   - maxResults: The number of destination port mappings that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomRoutingPortMappingsByDestinationPaginator(
        destinationAddress: String,
        endpointId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCustomRoutingPortMappingsByDestinationRequest, ListCustomRoutingPortMappingsByDestinationResponse> {
        let input = ListCustomRoutingPortMappingsByDestinationRequest(
            destinationAddress: destinationAddress, 
            endpointId: endpointId, 
            maxResults: maxResults
        )
        return self.listCustomRoutingPortMappingsByDestinationPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEndpointGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEndpointGroupsPaginator(
        _ input: ListEndpointGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEndpointGroupsRequest, ListEndpointGroupsResponse> {
        return .init(
            input: input,
            command: self.listEndpointGroups,
            inputKey: \ListEndpointGroupsRequest.nextToken,
            outputKey: \ListEndpointGroupsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEndpointGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - listenerArn: The Amazon Resource Name (ARN) of the listener.
    ///   - maxResults: The number of endpoint group objects that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEndpointGroupsPaginator(
        listenerArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEndpointGroupsRequest, ListEndpointGroupsResponse> {
        let input = ListEndpointGroupsRequest(
            listenerArn: listenerArn, 
            maxResults: maxResults
        )
        return self.listEndpointGroupsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listListeners(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listListenersPaginator(
        _ input: ListListenersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListListenersRequest, ListListenersResponse> {
        return .init(
            input: input,
            command: self.listListeners,
            inputKey: \ListListenersRequest.nextToken,
            outputKey: \ListListenersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listListeners(_:logger:)``.
    ///
    /// - Parameters:
    ///   - acceleratorArn: The Amazon Resource Name (ARN) of the accelerator for which you want to list listener objects.
    ///   - maxResults: The number of listener objects that you want to return with this call. The default value is 10.
    ///   - logger: Logger used for logging
    @inlinable
    public func listListenersPaginator(
        acceleratorArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListListenersRequest, ListListenersResponse> {
        let input = ListListenersRequest(
            acceleratorArn: acceleratorArn, 
            maxResults: maxResults
        )
        return self.listListenersPaginator(input, logger: logger)
    }
}

extension GlobalAccelerator.ListAcceleratorsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListAcceleratorsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListByoipCidrsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListByoipCidrsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListCrossAccountAttachmentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListCrossAccountAttachmentsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListCrossAccountResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListCrossAccountResourcesRequest {
        return .init(
            acceleratorArn: self.acceleratorArn,
            maxResults: self.maxResults,
            nextToken: token,
            resourceOwnerAwsAccountId: self.resourceOwnerAwsAccountId
        )
    }
}

extension GlobalAccelerator.ListCustomRoutingAcceleratorsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListCustomRoutingAcceleratorsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListCustomRoutingEndpointGroupsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListCustomRoutingEndpointGroupsRequest {
        return .init(
            listenerArn: self.listenerArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListCustomRoutingListenersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListCustomRoutingListenersRequest {
        return .init(
            acceleratorArn: self.acceleratorArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListCustomRoutingPortMappingsByDestinationRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListCustomRoutingPortMappingsByDestinationRequest {
        return .init(
            destinationAddress: self.destinationAddress,
            endpointId: self.endpointId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListCustomRoutingPortMappingsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListCustomRoutingPortMappingsRequest {
        return .init(
            acceleratorArn: self.acceleratorArn,
            endpointGroupArn: self.endpointGroupArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListEndpointGroupsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListEndpointGroupsRequest {
        return .init(
            listenerArn: self.listenerArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GlobalAccelerator.ListListenersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GlobalAccelerator.ListListenersRequest {
        return .init(
            acceleratorArn: self.acceleratorArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
